package Comprobaciones;

import Principal.Main;
import Utilidades.Configuracion;
import java.sql.*;
import controlador.AlertaControlador;
import java.util.ArrayList;
import java.util.List;
import modelo.entidades.Alerta;
import modelo.AlertaModelo;
import modelo.RegistroAccesoModelo;
import modelo.entidades.RegistroAcceso;
import Utilidades.Fechas;
import java.util.Date;
import Utilidades.Errores;
import vista.Alerta.AvisoAlerta;

/**
 *
 * @author ffcotan
 */
public class ComprobarEstanciaCampus implements Runnable {

    RegistroAccesoModelo registroAccesoModelo = Main.getRegistroAccesoModelo();
    AlertaControlador alertaControlador = Main.getAlertaControlador();
    AlertaModelo alertaModelo = Main.getAlertaModelo();

    @Override
    public void run() {
        List<RegistroAcceso> registroAccesos = null;
        List<Alerta> alertas = null;
        int tiempo = Integer.valueOf(Configuracion.getPropiedad("Comprobaciones")) * 60000;
        int estancia = Integer.valueOf(Configuracion.getPropiedad("Estancia")) * 3600000;

        while (true) {
            try {
                Thread.sleep(tiempo);
            } catch (InterruptedException ex) {
                Errores.mostrarError(ex);
            }
            try {
                registroAccesos = registroAccesoModelo.listar();
                alertas = alertaModelo.listar();
            } catch (SQLException ex) {
                Errores.mostrarError(ex);
            } catch (Exception ex) {
                Errores.mostrarError(ex);
            }

            for (RegistroAcceso registroAcceso : registroAccesos) {
                Timestamp fecha = Fechas.obtenerTimestampSQL(new Date());
                if (registroAcceso.getFechaSalida() == null) {
                    if ((registroAcceso.getFechaEntrada().getTime() + estancia) < (fecha.getTime())) {
                        boolean act = false;
                        for (Alerta alerta : alertas) {
                            if (alerta.getMatricula().equals(registroAcceso.getVehiculo().getMatricula())) {
                                act = true;
                            }
                        }
                        if (!act) {
                            fireNuevaAlertaGesture(registroAcceso.getVehiculo().getMatricula(), Fechas.fechaATexto(new Date()), "Exceso Tiempo", "false", "");
                        }
                    }
                }
            }
        }
    }

    protected void fireNuevaAlertaGesture(String matricula, String fecha, String tipo, String atendida, String Observa) {
        List<String> datos = new ArrayList<String>();
        datos.add(matricula);
        datos.add(fecha);
        datos.add(tipo);
        datos.add(atendida);
        datos.add(Observa);

        alertaControlador.nuevaEntidadGesture(datos);
        new AvisoAlerta("LIMITE DE TIEMPO", "Matrícula: " + matricula, "Fecha: " + fecha).setVisible(true);
    }

    /* protected void fireActualizaAlertaGesture(String matricula, String fecha, String tipo, String atendida, String Observa) {
    List<String> dat = new ArrayList<String>();
    dat.add(matricula);
    dat.add(fecha);
    dat.add(tipo);
    dat.add(atendida);
    dat.add(Observa);

    alertaControlador.actualizaEntidadGesture(dat);
    }*/
}
